import {getStateJwtKey} from "../localStorages/localStorageUesrData.js"
import {showToast} from "../Toast.js"
// 添加请求拦截器
axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    console.log(response);
    return response;
}, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    if (error.status === 401) {
        window.location.replace('/login.html');
    }

    if (error.status === 400) {

        console.log('Error信息:', error.response.data.message);
        showToast(error.response.data.message, 'error');
    }

    return Promise.reject(error);
});

//  Post 请求封装
// 使用Axios Params发送POST请求 封装
async function AxiosPostToParams(url, Data) {
    let state = getStateJwtKey();

    return await axios({
        method: 'POST', // 或者 'PUT'，取决于你的API要求
        url: url, headers: {
            'Authorization': 'Bearer ' + state
        }, params: Data
    })
}


// 使用Axios API发送POST请求 封装
async function AxiosPostToJson(url, Data) {
    let state = getStateJwtKey();

    return await axios({
        method: 'POST', // 或者 'PUT'，取决于你的API要求
        url: url, headers: {
            'Content-Type': 'application/json', // 指定内容类型为JSON
            'Authorization': 'Bearer ' + state
        }, data: Data // 直接传递JavaScript对象，Axios会自动将其转换为JSON字符串
    })
}

// 使用Axios 文件File 发送 post 请求 封装
async function AxiosPostToFile(url, fileData) {
    let state = getStateJwtKey();

    return await axios({
        method: 'post', url: url, headers: {
            'Authorization': 'Bearer ' + state, 'Content-Type': 'multipart/form-data'
        }, data: fileData
    });
}

// DELETE 请求封装
async function AxiosDeleteToParams(url, Data) {
    let state = getStateJwtKey();

    return await axios({
        method: 'delete', // 或者 'PUT'，取决于你的API要求
        url: url, headers: {
            'Content-Type': 'application/json', // 指定内容类型为JSON
            'Authorization': 'Bearer ' + state,
        },
        params: Data // 直接传递JavaScript对象，Axios会自动将其转换为JSON字符串
    })
}


//  Put 请求封装
// 使用Axios API发送Put请求 封装
async function AxiosPutToJson(url, Data) {
    let state = getStateJwtKey();

    return await axios({
        method: 'put', // 或者 'PUT'，取决于你的API要求
        url: url, headers: {
            'Content-Type': 'application/json', // 指定内容类型为JSON
            'Authorization': 'Bearer ' + state
        }, data: Data // 直接传递JavaScript对象，Axios会自动将其转换为JSON字符串
    })
}

// 使用Axios Params发送Put请求 封装
async function AxiosPutToParams(url, Data) {
    let state = getStateJwtKey();

    return await axios({
        method: 'put', // 或者 'PUT'，取决于你的API要求
        url: url, headers: {
            'Content-Type': 'application/json', // 指定内容类型为JSON
            'Authorization': 'Bearer ' + state
        }, params: Data // 直接传递JavaScript对象，Axios会自动将其转换为JSON字符串
    })
}

// Get 请求封装
// 使用Axios params 发送 Get 请求 封装
async function AxiosGetToParams(url, Data) {
    let state = getStateJwtKey();

    return await axios({
        method: 'GET', // 或者 'PUT'，取决于你的API要求
        url: url, headers: {
            'Content-Type': 'application/json', // 指定内容类型为JSON
            'Authorization': 'Bearer ' + state
        }, params: Data
    })
}

// 使用Axios Json 发送 Get 请求 封装
async function AxiosGetToJson(url, Data) {
    let state = getStateJwtKey();

    return await axios({
        method: 'GET', // 或者 'PUT'，取决于你的API要求
        url: url, headers: {
            'Content-Type': 'application/json', // 指定内容类型为JSON
            'Authorization': 'Bearer ' + state
        }, data: Data
    })
}

// 使用Axios 获取token
async function AxiosGetToToken(url, JwtKey) {

    return await axios({
        method: 'GET', // 或者 'PUT'，取决于你的API要求
        url: url, headers: {
            'Authorization': 'Bearer ' + JwtKey
        }
    });
}


export {
    AxiosGetToToken,
    AxiosPostToJson,
    AxiosGetToJson,
    AxiosPostToParams,
    AxiosGetToParams,
    AxiosPutToJson,
    AxiosPutToParams,
    AxiosPostToFile,
    AxiosDeleteToParams
}
